import java.util.Arrays;
import java.util.Random;

public class Test {
    //生成一个顺序数组的方法
    public static void order(int[] array){
        for(int i=0;i< array.length;i++){
            array[i]=i;
        }
    }

    //生成一个逆序数组的方法
    public static void reverseOrder(int[] array){
        for(int i=0;i<array.length;i++){
            array[i]= array.length-i;
        }
    }

    //生成一个随机数数组的方法
    public static void randomOrder(int[] array){
        Random random=new Random();
        for(int i=0;i<array.length;i++){
            array[i]= random.nextInt(10_0000);
        }
    }

    //测试直接插入排序时间的方法
    public static void testInsertSort(int[]array){
        //拷贝一个新的数组
        array= Arrays.copyOf(array,array.length);
        //获取起始时间戳
        long starttime=System.currentTimeMillis();
        Sort.insertSort(array);
        //获取终止时间戳
        long endtime=System.currentTimeMillis();
        //输出耗时
        System.out.println("直接插入排序耗时:"+(endtime-starttime));
    }

    //测试希尔排序时间的方法
    public static void testShellSort(int[]array){
        //拷贝一个新的数组
        array= Arrays.copyOf(array,array.length);
        //获取起始时间戳
        long starttime=System.currentTimeMillis();
        Sort.shellSort(array);
        //获取终止时间戳
        long endtime=System.currentTimeMillis();
        //输出耗时
        System.out.println("希尔排序耗时:"+(endtime-starttime));
    }

    //测试直接选择排序时间的方法
    public static void testSelectSort(int[]array){
        //拷贝一个新的数组
        array= Arrays.copyOf(array,array.length);
        //获取起始时间戳
        long starttime=System.currentTimeMillis();
        Sort.selectSort(array);
        //获取终止时间戳
        long endtime=System.currentTimeMillis();
        //输出耗时
        System.out.println("直接选择排序耗时:"+(endtime-starttime));
    }

    //测试直接选择排序时间的方法
    public static void testHeapSort(int[]array){
        //拷贝一个新的数组
        array= Arrays.copyOf(array,array.length);
        //获取起始时间戳
        long starttime=System.currentTimeMillis();
        Sort.heapSort(array);
        //获取终止时间戳
        long endtime=System.currentTimeMillis();
        //输出耗时
        System.out.println("堆排序耗时:"+(endtime-starttime));
    }

    public static void main(String[] args) {
        int[]array=new int[10_0000];
        //测试顺序数组情况
        System.out.println("***********************");
        System.out.println("顺序数组情况：");
        order(array);
        testInsertSort(array);
        testShellSort(array);
        testSelectSort(array);
        testHeapSort(array);
        System.out.println("***********************");

        //测试逆序数组情况
        System.out.println("逆序数组情况：");
        reverseOrder(array);
        testInsertSort(array);
        testShellSort(array);
        testSelectSort(array);
        testHeapSort(array);
        System.out.println("***********************");

        //测试随机数组情况
        System.out.println("随机数组情况：");
        randomOrder(array);
        testInsertSort(array);
        testShellSort(array);
        testSelectSort(array);
        testHeapSort(array);
        System.out.println("***********************");

    }
}
